/**
 * 强制清除 el-button 的焦点
 * @param {*} event click event
 */
export const forceBtnBlur = event => {
	let target = event.target;
	if (target.nodeName == 'I' || target.nodeName == 'SPAN') {
		target = event.target.parentNode;
	}
	target.blur();
};

/**
 * 修复 el-upload 组件进度条 100% 时不是上传完成的问题
 * @param {*} event
 * @param {*} file
 * @param {*} fileList
 */
export const fixUploadPercent = (vueThis, event, file, fileList) => {
	let index = 0;
	// 只有fileList 跟file 里面的uid是唯一的互相对应的
	fileList.forEach((v, i) => {
		if (v.uid === file.uid) {
			index = i;
		}
	});
	// 获取动态的进度
	let percent = parseInt(event.percent);
	vueThis.$nextTick(() => {
		setTimeout(() => {
			if (percent >= 99) {
				// 当动态的进度超过 99 就获取 dom 让值一直显示99直到上传成功
				let dom = document.getElementsByClassName('el-upload-list__item')[index];
				let progressText = dom.getElementsByClassName('el-progress__text');
				if (progressText && progressText.length) {
					progressText[0].style.opacity = 0;
					progressText[0].innerText = '99%';
					progressText[0].style.opacity = 1;
				}
			}
		});
	});
};

/**
 * 将知识库分类列表转换成cascader的选项
 * @param {*} data
 * @returns
 */
export const transformData = data => {
	// 检查数据是否为数组，如果是，递归地转换每个元素
	if (Array.isArray(data)) {
		return data.map(transformData);
	}

	// 如果数据是一个对象，并且具有children属性，递归地转换children属性
	if (data && typeof data === 'object' && data.children) {
		return {
			value: data.id,
			label: data.name,
			children: transformData(data.children)
		};
	}

	// 如果数据不是数组也不是对象，直接返回数据
	return {
		value: data.id,
		label: data.name
	};
};

/**
 * 将知识库中的问题分类分拼接成路径方式
 * @param {*} array
 * @param {*} targetId
 * @returns
 */
export const findAndConcatNamesById = (array, targetId) => {
	let pathNames = [];

	function recurse(items) {
		for (let item of items) {
			// 将当前项的name添加到路径数组中
			pathNames.push(item.name);

			if (item.id === targetId) {
				// 找到目标id，返回路径数组
				return pathNames;
			} else if (item.children && item.children.length) {
				// 如果存在子项，递归处理子项
				let result = recurse(item.children);
				if (result) return result; // 如果子项中找到了目标id，返回结果
			}

			// 如果当前项不是目标id，从路径中移除它的name
			pathNames.pop();
		}
		return null; // 如果当前分支没有找到目标id，返回null
	}

	let result = recurse(array);

	// 如果找到了目标id，使用特定的分隔符连接name
	if (result) {
		return pathNames.join(' / ');
	} else {
		return '未找到指定id的路径';
	}
};
/**
 * 从树形结构中提取所有的id
 * @param {*} obj
 * @returns
 */
export const extractIds = obj => {
	let ids = [];
	if (obj.id) {
		ids.push(obj.id);
	}
	if (obj.children) {
		ids = ids.concat(extractIds(obj.children));
	}
	return ids;
};
